江离书生

vuePress-theme-reco 史博辉    2024
江离书生 江离书生

Choose mode

  • dark
  • auto
  • light
主页
分类
  • html
  • java
  • 日常生活
  • markdown
  • mysql
  • nvm
  • pnpm
  • 常见问题
  • vue3
标签
时间轴
author-avatar

史博辉

51

文章

9

标签

主页
分类
  • html
  • java
  • 日常生活
  • markdown
  • mysql
  • nvm
  • pnpm
  • 常见问题
  • vue3
标签
时间轴
  • HTML

    • HTML5 简介

      • HTML5 简介
      • HTML 历史与 HTML5
      • HTML 发展历史
      • HTML 4.01 和 XHTML
      • HTML 和 XHTML 的文档类型定义(DTD)
      • 从 XHTML 到 HTML5
      • HTML5 的优势
      • 解决跨浏览器问题
      • 部分代替了原来的 JavaScript
      • 更明确的语义支持
      • 增强了 Web 应用程序的功能
      • HTML5 的基本结构和语法变化
      • HTML5 的基本结构
      • 标签不再区分大小写
      • 元素可以省略结束标签
      • 支持 boolean 值的属性
      • 允许属性值不使用引号
      • 小结
    • HTML5 的常用元素与属性

    • HTML5 表单相关的元素和属性

    • HTML5 的绘图支持

    • HTML5 的多媒体支持

    • 级联样式单与 CSS 选择器

    • 字体与文本相关属性

    • 背景、边框和边距相关属性

    • 大小、定位、轮廓相关属性

    • 盒模型与布局相关属性

    • 表格、列表相关属性及 media query

    • 变形与动画相关属性

    • JavaScript 语法详解

    • DOM 编程详解

    • 事件处理机制

    • 本地存储与离线应用

    • 文件支持与二进制数据

    • Web Worker 多线程 API

    • 客户端通信

    • HTML5 疯狂俄罗斯方块

HTML 和 XHTML 的文档类型定义(DTD)

vuePress-theme-reco 史博辉    2024

HTML 和 XHTML 的文档类型定义(DTD)

史博辉 2022-10-15 05:53:00 html

表面上看,HTML 和 XHTML 显得杂乱无章,但实际上 W3C(World Wide Web Consortium,万维网联盟,制订 Web 标准的权威组织)为 HTML 和 XHTML 制订了严格的语义约束。W3C 组织使用 DTD (Document Type Definition,文档类型定义)来定义 HTML 和 XHTML 的语义约束,包括 HTML 文档中可以出现哪些元素,各元素支持哪些属性等。

打开 HTML4.01 的 DTD 文档(网址:http://www.w3.org/TR/html401/loose.dtd),在该文档中可以看到如下片段:

<!ELEMENT BODY O O (%flow;)* +(INS|DEL) -- document body -->
<!ATTLIST BODY
 %attrs;                                -- %coreattrs, %i18n, %events --
 onload         %Script;    #IMPLIED    -- the document has been loaded --
 onunload       %Script;    #IMPLIED    -- the document has been removed --
 background     %URI;       #IMPLIED    -- texture tile for document background --
 %bodycolors;                           -- bgcolor, text, link, vlink, alink --
 >

上面的 DTD 片段定义了 BODY(全部大写)元素可以支持 %attrs 指定的各种通用属性;除此之外,BODY 元素还可以指定 onload、onunload、background、bgcolor、text、link、vlink、alink 这些属性。

对 HTML 有一定熟悉的人可能经常看到 BODY 标签(也叫 BODY 标记)的说法,在 HTML 语言中,经常会发生把元素称为标签的情况。但实际上按标准说法,应该称为 BODY 元素。比如上面的 DTD 片段使用了 ELEMENT 来定义 BODY 元素。

BODY 元素能接受的子元素则由 %flow 来决定,它是一个参数实体引用,这个参数实体的定义如下:

<!ENTITY %flow "%block; | %inline;">

其中 %block 也是一个参数实体引用,它代表换行的“块模型”的 HTML 元素,它的定义如下:

<!ENTITY %block
    "P | %heading; | %list; | %preformatted; | DL | DIV | CENTER | NOSCRIPT | NOFRAMES | BLOCKQUOTE | FORM | ISINDEX | HR | TABLE | FIELDSET | ADDRESS">

其中 %inline 也是一个参数实体引用,它代表不换行的“行内” HTML 元素,它的定义如下:

<!ENTITY % inline "#PCDATA | %fontstyle; | %phrase; | %special; | %formctrl;">

再打开 XHTML 1.0的 DTD 文档(网址:http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd),在该文档中可以看到如下片段:

<!ELEMENT body %Flow;>
<!ATTLIST body
 %attrs;
 onload         %Script;    #IMPLIED
 onunload       %Script;    #IMPLIED
 background     %URI;       #IMPLIED
 bgcolor        %Color;     #IMPLIED
 text           %Color;     #IMPLIED
 link           %Color;     #IMPLIED
 vlink          %Color;     #IMPLIED
 alink          %Color;     #IMPLIED
 >

上面的 DTD 片段同样详细定义了 body 元素可包含哪些子元素,body 元素除了支持 %attrs 指定的各种通用属性外,body 元素还可以指定 onload、onunload、background、bgcolor、text、link、vlink、alink 这些属性。body 元素可包含的子元素由 %Flow 参数实体引用定义,该参数实体的定义如下:

<!ENTITY %Flow "(#PCDATA | %block; | form | %inline; | %misc;)*">

通过上面的对比不难发现,HTML4.01 与 XHTML 基本相似,只是 HTML4.01 允许元素使用大写字母,而 XHTML 则要求所有元素、属性都必须是小写字母。

无论是 HTML4.01 还是 XHTML,它们都有 DTD 作为语义约束。也就是说,它们都有严格的规范标准,但实际上很少有 HTML 页面完全遵守 HTML4.01 或 XHTML 规范。在这样的背景下,WHATWG (Web Hypertext Application Technology Working Group,Web 超文本应用技术工作组)制订了一个新的 HTML 标准,即 HTML5。